




# 导入各种包
import time,os,pytest,shutil,json


# # 修改测试报告窗口标题
def set_winds_name(new_name, file_path):
    # 以读取的方式打开index文件 并保存到新变量里
    f = open(f"{file_path}/index.html", "r", encoding="utf-8")
    # 读取文件内所有内容并保存到变量里
    data = f.readlines()
    # 关闭文件
    f.close()
    # 以写入的方式打开index文件 并保存到变量内
    w = open(f"{file_path}/index.html", "w", encoding="utf-8")
    # 遍历data每一行数据 如遇到allure Report 则替换为new_name
    for line in data:
        w.write(line.replace("Allure Report", new_name))
    # 关闭文件
    w.close()

#
# # 修改报告内的标题名称
def config_name(new_name, file_path):
    # 获取summary.json文件路径
    # 以读取的方式打开并保存到对象内
    f = open(f"{file_path}/widgets/summary.json", "r", encoding="utf-8")
    # 加载json文件内容到data里
    data = json.load(f)
    # 修改内容
    data["reportName"] = new_name
    # 关闭文件
    f.close()
    # 以写入的方式打开文件
    w = open(f"{file_path}/widgets/summary.json", "w", encoding="utf-8")
    # 将字典转成json并写入原来文件
    json.dump(data, w, ensure_ascii=False, indent=4)
    # 关闭文件
    w.close()
#
#
# # 清理报告
def zuto_clear(n):
    # 报告的路径
    dir = os.path.dirname(__file__) + "/testReport/"
    # 获取路径内所有文件名
    file_list = os.listdir(dir)
    # 将所有文件名按创建时间排序

    # 遍历文件名称列表 进行删除 -n切片将之外的进行删除
    for name in file_list[:-n]:
        try:
            shutil.rmtree(dir + name)
        except:
            os.remove(dir + name)


if __name__ == '__main__':
    # 获取时间戳
    cur_time = time.strftime("%Y-%m-%d-%H-%M-%S")
    # 临时报告路径存放
    path = os.path.dirname(__file__) + "/testReport/temp"
    # 生成html后要存放的路径
    report = os.path.dirname(__file__) + f"/testReport/{cur_time}"
    # 执行测试用例生成测试报告
    pytest.main(["-vs", f"--alluredir={path}", "--clean-alluredir"])
    # 将临时报告转为html
    os.system(f"allure generate {path} -o {report}")
    # 修改测试报告窗口名称
    set_winds_name("中国邮储",report)
    # 修改报告内模块名称
    config_name("自动化登录测试",report)
    # 手动创建一个用于查看的脚本
    f = open(f"{report}/查看报告.bat", "w")
    f.write("allure open ./")
    f.close()
    # 将生成的测试报告压缩成zip 第一个是路径 第二个是要压缩的格式 第三个要压缩的文件
    zip_path = shutil.make_archive(base_name=f"{path}/测试报告999",format="zip",root_dir=report)
    # 发送报告给指定的人

    # 清理报告
    zuto_clear(5)
